package eteam.aps.mapper;

import eteam.aps.model.dto.SalesOrderDisDto;
import eteam.aps.model.dto.SalesOrderUpdateDto;
import eteam.aps.model.entity.SalesGood;
import eteam.aps.model.entity.SalesOrder;
import eteam.aps.model.entity.other.SalesOrderBody;
import eteam.aps.model.vo.sales_order.SalesOrderShow;
import eteam.aps.model.vo.sales_order.SalesOrderVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 销售订单 持久层
 *
 * @author LiuLei
 */
@Mapper
public interface SalesOrderMapper{

    /**
     * 查询最大的单号
     *
     * @return 单号
     */
    String selectMaxWorkOrderNumber();

    /**
     * 批量添加订单信息
     *
     * @param list 订单列表
     * @return 增加的数量
     */
    int saveCustomerOrder(List<SalesOrder> list);

    /**
     * 条件查询 订单信息
     *
     * @param map 查询条件
     * @return 订单信息
     */
    List<SalesOrderVo> getSalesOrderByQuery(Map<String, Object> map);

    /**
     * 查询订单数量
     *
     * @param map 查询条件
     * @return 订单条数
     */
    int selCountSalesOrderByQuery(Map<String, Object> map);

    /**
     * 根据物料编号查询 订单信息
     *
     * @param map 查询参数
     * @return 订单信息
     */
    List<SalesOrder> selectList(Map<String, Object> map);

    /**
     * 保存 销售发货单
     *
     * @param list 销售发货单
     * @return 增加的条数
     */
    int addSalesGood(List<SalesGood> list);

    /**
     * 修改订单的状态
     *
     * @param map 修改参数
     * @return 修改的条数
     */
    int updateSalesOrderOrderState(Map<String, Object> map);

    /**
     * 根据订单内码 查询订单信息
     *
     * @param fId 内码
     * @return 订单信息
     */
    SalesOrderShow selSalesOrderByFId(String fId);

    /**
     * 修改订单信息
     *
     * @param salesOrderUpdateDto 订单
     * @return 修改条数
     */
    int updateSalesOrderByFId(SalesOrderUpdateDto salesOrderUpdateDto);

    /**
     * 根据订单号查询 已存在的订单信息
     *
     * @param map 查询条件（订单号）
     * @return 订单信息
     */
    List<SalesOrderDisDto> selectOrderLisByOrderCode(Map<String, Object> map);

    /**
     * 根据内码、状态查询订单信息
     *
     * @param fId   内码
     * @param state 状态
     * @return 查询到的条数
     */
    int selCountByOrderState(@Param("id") String fId, @Param("state") int state);

    /**
     * 删除订单信息
     * @param fId 内码
     * @return 删除的条数
     */
    int delBySalesOrderByFId(String fId);

    /**
     * 根据物料编号查询物料信息
     * @param map 物料编号
     * @return 物料信息
     */
    SalesOrderBody selectOneByInvCode(Map<String,Object> map);
}
